"""
    softmax 函数
"""
import numpy as np

def softmax(x):
    """
    softmax 函数
    y = exp(x)/sum(exp(x))
    v1 版本： 存在问题，会出现溢出的问题
    :param x:
    :return:
    """
    exp_x = np.exp(x)
    sum_exp_x = np.sum(exp_x)
    y = exp_x /sum_exp_x
    return y

def softmax_v2(x):
    """
    softmax 函数
    v2 版本： 可以防止溢出的情况
    :param x:   输入
    :return:    输出
    """
    max_data = np.max(x)
    x = x - max_data
    exp_x = np.exp(x)
    sum_exp_x = np.sum(exp_x)
    y = exp_x / sum_exp_x
    return y


def test_softmax():
    """
    逻辑演示-softmax
    :return:
    """
    data = np.array([0.3,0.5,0.7])

    exp_data = np.exp(data)
    print(exp_data)

    sum_exp_data = np.sum(exp_data)
    print(f"the sum exp_data is : {sum_exp_data}")

    y = exp_data/sum_exp_data

    print(f"result is : {y}")


if __name__ == '__main__':
    data = np.array([1005,1006,1007])
    # print(f"softmax v1 result is : {softmax(data)}")
    print(f"softmax v2 result is : {softmax_v2(data)}")